package br.com.mubi.relatorio;

import java.text.NumberFormat;
import java.util.List;

import br.com.mubi.comentario.Comentario;
import br.com.mubi.comentario.ComentarioDAO;
import br.com.mubi.review.Filme;
import br.com.mubi.review.Nota;
import br.com.mubi.review.NotaDAO;
import br.com.mubi.usuario.Usuario;
import br.com.mubi.util.DAOFactory;

public class RelatorioRN {
	
	private NotaDAO notaDAO;
	private ComentarioDAO comentarioDAO;
	
	private List<Filme> listaFilmes;
	
	public RelatorioRN() {
		this.notaDAO = DAOFactory.criarNotaDAO();
		this.comentarioDAO = DAOFactory.criarComentarioDAO();
	}
	
	public void criarRelatorio(Usuario usuario) {
		this.setListaFilmes(usuario.getFilme());
		
		for(Filme filme : usuario.getFilme()) {
			filme.setMediaNota(calcularMedia(filme.getId()));
			filme.setQtdComentarios(calcularQtdComentarios(filme.getId()));
		}
	}
	
	private int calcularQtdComentarios(long filmeId) {
		List<Comentario> listaComentarios = this.comentarioDAO.listarComentarioFilmePorId(filmeId);
		return listaComentarios.size();
	}

	public String calcularMedia(long filmeId) {
		List<Nota> listaNota = this.notaDAO.listarPorFilmeId(filmeId);
		double media = 0;
		String notaMedia = "0";
		
		if(listaNota.size() > 0) {	
			
			for(Nota nota : listaNota) {
				media += nota.getNota();
			}			
			
			media = media/listaNota.size();
			
			NumberFormat nf = NumberFormat.getInstance();
			nf.setMaximumFractionDigits(2);
			nf.setMinimumFractionDigits(1);
			notaMedia = nf.format(media);
		}		
		return notaMedia;
	}
	
	public List<Filme> getListaFilmes() {
		return listaFilmes;
	}

	public void setListaFilmes(List<Filme> listaFilmes) {
		this.listaFilmes = listaFilmes;
	}
}
